﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NHibernate;
using System.Data.SqlClient;
using System.Configuration;

namespace WebServiceDSDG6.Persistencia
{
    public class BaseDAO<Entidad, Id>
    {
        public static SqlConnection cnx = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlNoEncrypt"].ConnectionString);

        public Entidad Crear(Entidad entidad)
        {
            try
            {
                using (ISession sesion = NHibernateHelper.ObtenerSesion())
                {
                    sesion.Save(entidad);
                    sesion.Flush();
                }
            }
            catch (Exception e)
            {
                throw new Exception("Algo va mal en el guardado:"+e.Message);
            }
            return entidad;
        }
        public Entidad Obtener(Id id)
        {
            //try
            //{
                using (ISession sesion = NHibernateHelper.ObtenerSesion())
                {
                    return sesion.Get<Entidad>(id);
                }
            //}
            //catch (Exception e)
            //{

            //    throw new Exception("Imposible de Obtener: " + e.Message);

            //}
        }
        public Entidad Modificar(Entidad entidad)
        {
            try
            {
                using (ISession sesion = NHibernateHelper.ObtenerSesion())
                {
                    sesion.Update(entidad);
                    sesion.Flush();
                }
            }
            catch (Exception e)
            {
                throw new Exception("Algo va mal en el guardado");
            }
            return entidad;
        }
        public void Eliminar(Entidad entidad)
        {
            using (ISession sesion = NHibernateHelper.ObtenerSesion())
            {
                sesion.Delete(entidad);
                sesion.Flush();
            }
        }
        public ICollection<Entidad> ListarTodos()
        {
            using (ISession sesion = NHibernateHelper.ObtenerSesion())
            {
                ICriteria busqueda = sesion.CreateCriteria(typeof(Entidad));
                return busqueda.List<Entidad>();
            }
        }
    }
}